package com.hanthink.system.service.task;

import java.util.List;
import java.util.Map;

import com.hanthink.common.core.domain.model.LoginUser;
import com.hanthink.system.domain.equipment.EquipConfirmLog;
import com.hanthink.system.domain.repair.Equip;
import com.hanthink.system.domain.repair.EquipSelfCheckVo;
import com.hanthink.system.domain.repair.EquipStandardPic;
import com.hanthink.system.domain.repair.EquipTaskItem;
import com.hanthink.system.domain.repair.Task;
import com.hanthink.system.domain.repair.TaskItem;
import com.hanthink.system.domain.repair.TaskSelect;

/**
 * <p>
 * Title: TaskExecuteService
 * </p>
 * <p>
 * Description: 任务执行业务层接口
 * </p>
 * 
 * @author vondser
 * @date 2020年12月10日
 */
public interface TaskExecuteService {

	/**
	 * <p>
	 * Title: queryTasKInfo
	 * </p>
	 * <p>
	 * Description: 扫描设备条码，查询任务信息
	 * </p>
	 * 
	 * @param equip 设备条码
	 * @return
	 */
	Task queryTaskInfo(Equip equip);

	/**
	 * <p>
	 * Title: queryTaskItemUndoInfo
	 * </p>
	 * <p>
	 * Description: 根据点检任务查询点检项
	 * </p>
	 * 
	 * @param task 点检任务信息
	 * @return
	 */
	TaskItem queryTaskItemUndoInfo(Task task);

	/**
	 * <p>
	 * Title: queryTaskItemUnCreatedInfo
	 * </p>
	 * <p>
	 * Description: 查询设备点检任务项
	 * </p>
	 * 
	 * @param equip 设备编码
	 * @return 未创建的设备任务项列表
	 */
	List<EquipTaskItem> queryTaskItemUnCreatedInfo(Equip equip);

	/**
	 * <p>
	 * Title: createTaskWithItem
	 * </p>
	 * <p>
	 * Description: 创建任务、任务项
	 * </p>
	 * 
	 * @param eqTaskItemList 设备项列表
	 * @param map            参数集合
	 * @return
	 */
	List<TaskItem> createTaskWithItem(List<EquipTaskItem> eqTaskItemList, Map<String, Object> map);

	/**
	 * <p>
	 * Title: saveOrUpdateTaskItemInfo
	 * </p>
	 * <p>
	 * Description: 更新设备项列表
	 * </p>
	 * 
	 * @param itemList 设备项列表
	 * @return true/false
	 */
	boolean saveOrUpdateTaskItemInfo(List<TaskItem> itemList);

	/**
	 * <p>
	 * Title: saveOrUpdateTaskItemInfo1
	 * </p>
	 * <p>
	 * Description: 更新设备项列表
	 * </p>
	 * 
	 * @param itemList 设备项列表
	 * @return true/false
	 */
	boolean saveOrUpdateTaskItemInfo1(List<TaskItem> itemList);

	/**
	 * <p>
	 * Title: queryTaskItemInfo
	 * </p>
	 * <p>
	 * Description: 查询设备任务项列表
	 * </p>
	 * 
	 * @param equip 设备信息
	 * @return 设备项列表
	 */
	List<TaskItem> queryTaskItemInfo(Equip equip);

	/**
	 * <p>
	 * Title: queryStandardPicList
	 * </p>
	 * <p>
	 * Description: 获取设备标图列表
	 * </p>
	 * 
	 * @param equip 设备信息
	 * @return 标图列表
	 */
	List<EquipStandardPic> queryStandardPicList(Equip equip);

	/**
	 * <p>
	 * Title: saveEquipSelfCheckInfo
	 * </p>
	 * <p>
	 * Description: 保存自检信息
	 * </p>
	 * 
	 * @param scv       自建信息
	 * @param loginUser
	 * @return
	 */
	boolean saveEquipSelfCheckInfo(EquipSelfCheckVo scv, LoginUser loginUser);

	/**
	 * <p>
	 * Title: queryEquipList
	 * </p>
	 * <p>
	 * Description: 根据当前用户查询设备列表
	 * </p>
	 * 
	 * @param loginUser 当前用户
	 * @return 设备列表
	 */
	List<Equip> queryEquipList(LoginUser loginUser);

	/**
	 * <p>
	 * Title: updateEquipInfo
	 * </p>
	 * <p>
	 * Description: 更新设备信息
	 * </p>
	 * 
	 * @param equip     设备数据
	 * @param loginUser
	 * @return
	 */
	boolean updateEquipInfo(Equip equip, LoginUser loginUser);

	/**
	 * <p>
	 * Title: updateEquipInfo
	 * </p>
	 * <p>
	 * Description: 记录设备确认日志信息
	 * </p>
	 * 
	 * @param equipConfirmLog 设备确认日志
	 * @param loginUser
	 * @return
	 */
	int saveEquipConfirmLog(EquipConfirmLog equipConfirmLog);

	/**
	 * <p>
	 * Title: updateEquipInfo
	 * </p>
	 * <p>
	 * Description: 更新设备信息
	 * </p>
	 * 
	 * @param equip     设备数据
	 * @param loginUser
	 * @return
	 */
	boolean updateEquipAppointment(Equip equip, LoginUser loginUser);

	/**
	 * 查询当前设备点检任务项列表
	 * 
	 * @param task 任务实体
	 * @return 任务列表
	 */
	List<Task> queryEquipTaskList(Task task);

	/**
	 * 根据点检项ID查询点检项子项信息
	 * 
	 * @param task 任务实体
	 */
	List<TaskSelect> queryTaskItemSelect(TaskSelect select);

	/**
	 * 根据设备ID查询维修单
	 * 
	 * @param equip 设备实体
	 */
	int equipmentNoRepaired(Equip equip);


	void updateTaskStatusCloseTask(Task task);
}
